package com.easy.cloud.web.service.upms.biz.service;

import com.easy.cloud.web.service.upms.api.dto.*;
import com.easy.cloud.web.service.upms.api.vo.UserVO;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * User interface
 *
 * @author Fast Java
 * @date 2023-08-03 14:25:41
 */
public interface IUserService {

    /**
     * 新增数据
     *
     * @param userDTO 保存参数
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO save(UserDTO userDTO);

    /**
     * 更新数据，默认全量更新
     *
     * @param userDTO 保存参数
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO update(UserDTO userDTO);

    /**
     * 根据ID删除数据
     *
     * @param userId 对象ID
     * @return java.lang.Boolean
     */
    Boolean removeById(String userId);

    /**
     * 根据ID获取详情
     *
     * @param userId 对象ID
     * @return java.lang.Boolean
     */
    UserVO detailById(String userId);

    /**
     * 获取当前用户基本信息，包括用户角色，部门，权限等
     *
     * @param userId 用户ID
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO baseDetail(String userId);

    /**
     * 根据条件获取列表数据
     *
     * @param userQueryDTO 查询参数
     * @return List<com.easy.cloud.web.service.upms.api.vo.UserVO> 返回列表数据
     */
    List<UserVO> list(UserQueryDTO userQueryDTO);

    /**
     * 根据条件获取分页数据
     *
     * @param userQueryDTO 查询参数
     * @return List<com.easy.cloud.web.service.upms.api.vo.UserVO> 返回列表数据
     */
    Page<UserVO> page(UserQueryDTO userQueryDTO);

    /**
     * 根据用户名获取详情
     *
     * @param userName 用户名
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO loadLoginUserByUsername(String userName);

    /**
     * Oauth2.0 code授权模式
     *
     * @param type         授权类型
     * @param userLoginDTO 授权数据
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO loadLoginUserBySocial(String type, UserLoginDTO userLoginDTO);


    /**
     * 绑定用户角色
     *
     * @param userBindDTO 用户角色
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO bindUserRole(UserBindDTO userBindDTO);

    /**
     * 用户注册
     *
     * @param userRegisterDTO 注册信息
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO registerUser(UserRegisterDTO userRegisterDTO);

    /**
     * 根据用户ID锁定用户账号
     *
     * @param userId 用户ID
     * @return com.easy.cloud.web.service.upms.api.vo.UserVO
     */
    UserVO lockUser(String userId);

    /**
     * 修改密码
     *
     * @param userBindDTO 用户信息
     */
    void changePassword(UserBindDTO userBindDTO);

    /**
     * 校验密码
     *
     * @param userBindDTO 密码明文
     */
    Boolean checkPassword(UserBindDTO userBindDTO);

    /**
     * 绑定用户电话
     *
     * @param userBindDTO 绑定信息
     */
    void bindUserTel(UserBindDTO userBindDTO);

    /**
     * 移除租户下的所有用户
     *
     * @param tenantId 租户ID
     */
    void removeTenantAllUser(String tenantId);

    /**
     * 冻结租户下的所有用户
     *
     * @param tenantId 租户ID
     */
    void freezeTenantAllUser(String tenantId);

}